package com.threaddemo8;

public class WaitNotifyTest1 {
    public static void main(String[] args) {
        /**
         * 这里可以任意的对象，每个对象都有一个锁
         * 当这个锁被一个线程A获取到，其他线程不能再获取，直到线程A执行释放其他线程才能获取
         * 执行wait方法可以释放锁，其他线程可以拿到锁执行通知
         */
        Object lock = new Object();

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程A等待获取lock锁");
                synchronized (lock) {
                    try {
                        System.out.println("线程A获取了lock锁");
                        System.out.println("线程A将要运行lock.wait()方法进行等待");
                        lock.wait();//执行等待,一直等待通知
                        System.out.println("线程A等待结束");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程B等待获取lock锁");
                synchronized (lock) {
                    System.out.println("线程B获取了lock锁");
                    System.out.println("线程B将要运行lock.notify()方法进行通知");
                    lock.notify();
                }
            }
        }).start();
    }
}

